//user的schema
var mongoose = require('mongoose')
var Schema = mongoose.Schema
var ObjectId = Schema.Types.ObjectId
var PostSchema = new mongoose.Schema({
  //定义user外键
	user:{
		type:ObjectId,
		ref:'User'
	},
  //定义type外键
	type:{
		type:ObjectId,
		ref:'Type'
	},
  //定义标题为String
	title:String,
  //定义内容为数组
	content:[],
	meta:{
		createAt:{
			type:Date,
			default:Date.now()
		},
		updateAt:{
			type:Date,
			default:Date.now()
		}
	},
})
PostSchema.pre('save',function(next){
	if(this.isNew){
		this.meta.createAt = this.meta.updateAt = Date.now()
		next()
	}else{
		this.meta.updateAt = Date.now()
		next()
	}
})

PostSchema.statics ={
  //定义通过type获取post,page当前页数，perpage为每页显示数量
	getByType:function(type,page,perpage,cb){
    //如果type类型为全部
		if(type == 'all'){
      //查询条件为全部,type,user用对象填充,跳过之前的页数*每页显示条数的数据,并且只取每页显示数量的数据，按更新倒序排序
			return this.find({}).populate('type user','-_id').skip((page-1)*perpage).limit(perpage).sort('-meta.updateAt').exec(cb)
		}else{
      //查询条件为当前type类型，其他操作都一样
			return this.find({type:type}).populate('type user','-_id').skip((page-1)*perpage).limit(perpage).sort('-meta.updateAt').exec(cb)
		}
	},
  //通过id获取该条数据
	getById:function(id,cb){
		return this.findOne({_id:id}).populate('type user','-id').exec(cb)
	},
  //这条查询用作获取该用户的其他5条文章
	getAnotherById:function(id,userid,cb){
    //通过userid作为查询条件，并且id不等于传进来的id,限制取5条数据，按时间倒序排序
		return this.find({user:userid}).where('_id').ne(id).sort('-meta.updateAt').limit(5).exec(cb)
	},
  //获取数量的方法
	getCount:function(type,cb){
		if(type == 'all'){
			return this.count({},cb)
		}else{
			return this.count({type:type},cb)
		}

	},
  //限制获取100条的方法
	findAll:function(cb){
		return this.find({}).sort('-meta.updateAt').limit(100).exec(cb)
	}
}

module.exports = PostSchema